#ifndef SORTFRM__H_INCLUDED
#define SORTFRM__H_INCLUDED

#ifndef WX_PRECOMP
    #include <wx/wx.h>
#endif

#include <wx/string.h>
#include <wx/stattext.h>
#include <wx/gdicmn.h>
#include <wx/font.h>
#include <wx/colour.h>
#include <wx/settings.h>
#include <wx/spinctrl.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/choice.h>
#include <wx/textctrl.h>
#include <wx/button.h>
#include <wx/panel.h>
#include <wx/frame.h>
#include <wx/textdlg.h>
#include <wx/file.h>
#include <wx/filefn.h>
#include <wx/filename.h>

class SortFrame : public wxFrame
{
public:
    SortFrame(const wxString & title);                      // 构造函数
protected:
    void CreateAndLayoutCtrl();                             // 布局
    void SetInitParam();                                    // 为控件设置一些初始化参数
    void SaveData(wxString filename, int a[], int len);    // 保存数据
    void SaveRandomData();                                  // 保存随机数据到文件，实际保存过程调用SaveData()
    void SaveSortedData();                                  // 保存已排序的数据到文件，实际保存过程调用SaveData()
    void SaveFileDialog(int type);                          // 打开一个文件选择对话框，由其他函数调用
    void OnBtnGenerateClicked(wxCommandEvent& event);       // 事件响应函数，生成随机数
    void OnBtnSortClicked(wxCommandEvent& event);           // 对数据进行排序操作
    void OnBtnSaveClicked(wxCommandEvent& event);           // 对数据进行保存操作
    void OnBtnRandomPathClicked(wxCommandEvent& event);     // 对选择路径按钮进行响应，确定随机数的保存路径
    void OnBtnOrderPathClicked(wxCommandEvent& event);      // 对选择路径按钮进行响应，确定已排序数据的保存路径
    void OnAbout(wxCommandEvent& event);                    // 菜单事件响应，关于对话框
    void OnQuit(wxCommandEvent& event);                     // 菜单事件响应，退出程序
private:
    wxArrayString chChoices;
    wxSpinCtrl* spCount;
    wxSpinCtrl* spMin;
    wxSpinCtrl* spMax;
    wxChoice* ch;
    wxTextCtrl* tcRandomPath;
    wxButton* btnRandomPath;
    wxTextCtrl* tcOrderedPath;
    wxButton* btnOrderedPath;
    wxButton* btnGenerate;
    wxButton* btnSort;
    wxButton* btnSave;
    int *raw;       // 用于保存未排序数据
    int *sorted;    // 用于保存已排序数据
    int data_len;   // 用于保存排序数据长度


private:
    wxDECLARE_EVENT_TABLE();
};

enum
{
    idMenuQuit = 1000,
    idMenuAbout,
    idChoice,
    idBtnGenerate,
    idBtnSort,
    idBtnSave,
    idBtnRandomPath,
    idBtnOrderedPath,
    idTcRandomPath,
    idTcOrderedPath
};

#endif // SORTFRM__H_INCLUDED
